package com.darwin.uuas.utils;

// 引入必要的包

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.SignatureException;

import java.util.Date;

public class JwtUtils {

    private static final String SECRET_KEY = "your-secret-key";
    private static final long ACCESS_TOKEN_EXPIRATION = 15 * 60 * 1000; // 15 分钟
    private static final long REFRESH_TOKEN_EXPIRATION = 7 * 24 * 60 * 60 * 1000; // 7 天


    // 生成 Access Token
    public static String generateAccessToken(String subject) {
        // 设置用户标识符
        return Jwts.builder()
                .setSubject(subject)
                // 自定义声明，可以根据需要添加更多信息
                .claim("name", "Darwin")
                // 设置签发时间为当前时间
                .setIssuedAt(new Date())
                // 设置过期时间 (15分钟)
                .setExpiration(new Date(System.currentTimeMillis() + ACCESS_TOKEN_EXPIRATION))
                // 使用 HS256 算法和密钥进行签名
                .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
                // 生成 Token 字符串
                .compact();


    }

    /**
     * 生成 Refresh Token
     * @param subject
     * @return
     */
    public static String generateRefreshToken(String subject) {
        // 设置用户标识符
        return Jwts.builder()
                .setSubject(subject)
                // 设置签发时间为当前时间
                .setIssuedAt(new Date())
                // 设置过期时间 (7天)
                .setExpiration(new Date(System.currentTimeMillis() + REFRESH_TOKEN_EXPIRATION))
                // 使用 HS256 算法和密钥进行签名
                .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
                // 生成 Token 字符串
                .compact();
    }

    /**
     * 验证token
     * @param token
     * @return
     */
    public static Claims validateToken(String token) {
        try {
            return Jwts.parser()
                    .setSigningKey(SECRET_KEY)
                    .parseClaimsJws(token)
                    .getBody();
        } catch (SignatureException e) {
            throw new RuntimeException("JWT 签名无效");
        }
    }

    public static void main(String[] args) {
        String token = generateAccessToken("name:darwin");
        System.out.println("token===>"+token);
        Claims claims = validateToken(token);

        System.out.println(claims);

    }
}



